package com.zimin.shared.enums;

/**
 * 响应结果枚举，用于提供给GraceJSONResult返回给前端的
 * 本枚举类中包含了很多的不同的状态码供使用，可以自定义
 * 便于更优雅的对状态码进行管理，一目了然
 *
 * @author zimin
 */
public enum ResponseStatusEnum {

    /**
     * <p>自定义枚举业务异常</p>
     *  系统服务: 10000 - 19999
     */

    /**
     * 操作成功
     */
    SUCCESS(200, Boolean.TRUE, "操作成功！"),

    /**
     * 操作失败
     */
    FAILED(500, Boolean.FALSE, "操作异常！"),
    /**
     * 幂等性校验失败
     */
    IDEMPOTENCE_ERROR(501, Boolean.FALSE, "操作太过频繁,请刷新后重试！"),
    /**
     * 操作太频繁了
     */
    REDIS_LOCK(502, Boolean.FALSE, "操作太过频繁,请刷新后重试！"),

    /**
     * 空指针异常
     */
    NULL_POINT(5001, Boolean.FALSE, "操作失败，请联系管理员"),

    /**
     * 文件大小超过最大限制
     */
    FILE_MAX_SIZE_ERROR(5002, Boolean.FALSE, "文件大小超过最大限制"),
    FILE_UPLOAD_NULL_ERROR(510, Boolean.FALSE, "文件不能为空，请选择一个文件再上传！"),
    FILE_UPLOAD_FAIL(7001, Boolean.FALSE, "文件上传失败"),
    FILE_EXPORT_FAIL(7002, Boolean.FALSE, "文件导出失败"),
    FILE_IMPORT_FAIL(7003, Boolean.FALSE, "文件导入失败"),
    FILE_DOWNLOAD_FAIL(7004, Boolean.FALSE, "文件下载失败"),
    FILE_FORMATTER_FAIL(7005, Boolean.FALSE, "文件图片格式不支持！"),
    FILE_NOT_EXIST_ERROR(7006, Boolean.FALSE, "你所查看的文件不存在！"),
    USER_IS_EXISTED(8101, Boolean.FALSE, "用户已经存在了"),


    // 人脸识别错误代码
    FACE_VERIFY_TYPE_ERROR(600, Boolean.FALSE, "人脸比对验证类型不正确！"),
    FACE_VERIFY_LOGIN_ERROR(601, Boolean.FALSE, "人脸登录失败！"),


    // 网关签名错误
    SERVER_BUY(800, Boolean.FALSE, "服务器繁忙，请稍后再试！"),
    TOKEN_EXPIRES(801, Boolean.FALSE, "token已失效，请先去登录"),
    TIMESTAMP_IS_NULL(810, Boolean.FALSE, "时间戳不可为空！"),
    TIMESTAMP_IS_VALID(811, Boolean.FALSE, "时间戳无效！"),
    KEY_IS_NULL(812, Boolean.FALSE, "秘钥不可为空！"),
    SIGN_IS_NULL(813, Boolean.FALSE, "签名不可为空！"),
    SIGN_IS_VALID(814, Boolean.FALSE, "签名无效！"),
    //系统服务
    LOGIN_SUCCESS(1100, Boolean.TRUE, "登录成功"),
    FACE_LOGIN_SUCCESS(1100, Boolean.TRUE, "人脸登录成功"),
    ROLE_KEY_IS_EXIST(1101, Boolean.FALSE, "角色Key已经存在了！"),
    ROLE_NAME_IS_EXIST(1102, Boolean.FALSE, "角色名称已经存在了！"),
    ROLE_IS_NOT_EXIST(1103, Boolean.FALSE, "角色不存在！"),
    ACCOUNT_ID_IS_NULL(1200, Boolean.FALSE, "用户ID不可为空"),
    ACCOUNT_PASSWORD_IS_NULL(1201, Boolean.FALSE, "用户密码不可为空"),
    ACCOUNT_USERNAME_IS_NULL(1202, Boolean.FALSE, "用户名不可为空"),
    FACE_IS_NULL(1203, Boolean.FALSE, "人脸信息不可为空"),
    FACE_IS_NOT_SET(1204, Boolean.FALSE, "未设置人脸识别信息"),
    FACE_UPLOAD_FAIL(1205, Boolean.FALSE, "人脸信息上传失败"),
    NEW_AND_CONFIRM_PASSWORD_NO_EQUAL(1205, Boolean.FALSE, "两次输入的密码不相同"),
    LOGIN_NAME_OR_PWD(1300, Boolean.FALSE, "用户名或密码错误"),
    PASSWORD_IS_ERROR(1301, Boolean.FALSE, "用户名或密码错误"),
    PAGE_CONFIG_NOT_EXIST(1401, Boolean.FALSE, "页面配置不存在"),
    PAGE_CONFIG_PARAM_ERROR(1402, Boolean.FALSE, "页面配置错误"),

    USER_PHONE_IS_EXIST(2000, Boolean.FALSE, "注册手机号已经存在"),
    PASSWORD_RSA_ERROR(2001, Boolean.FALSE, "密码解密失败"),
    USER_REGISTER_ERROR(2002, Boolean.FALSE, "用户注册失败"),
    USER_PHONE_IS_NOT_EXIST(2003, Boolean.FALSE, "登录手机号不存在"),
    PASSWORD_ERROR(2004, Boolean.FALSE, "密码错误"),
    TOKEN_IS_EXPIRED(2005, Boolean.FALSE, "token过期"),
    TOKEN_IS_ERROR(2006, Boolean.FALSE, "非法用户token!"),
    FOLLOWING_GROUP_IS_NULL(2100, Boolean.FALSE, "关注分组不存在!"),
    FOLLOWING_USER_IS_NULL(2101, Boolean.FALSE, "关注的用户不存在!"),
    ;


    /**
     * 响应业务状态
     */
    private final Integer code;
    /**
     * 调用是否成功
     */
    private final Boolean success;
    /**
     * 响应消息，可以为成功或者失败的消息
     */
    private final String msg;

    ResponseStatusEnum(Integer code, Boolean success, String msg) {
        this.code = code;
        this.success = success;
        this.msg = msg;
    }

    public Integer status() {
        return code;
    }

    public Boolean success() {
        return success;
    }

    public String msg() {
        return msg;
    }
}